/**
 * @file adpt_otdr.h
 * @synopsis  
 * @author wen wjcapple@163.com
 * @version v2.0
 * @date 2016-12-13
 */
#ifndef  __ADPT_OTDR_H__
#define __ADPT_OTDR_H__

#include "otdrtestinterface.h"
#ifdef __cplusplus
extern "C" {
#endif
extern OtdrTestResult_t ch_tr;

/* --------------------------------------------------------------------------*/
/**
 * @synopsis  get_ch_otdr_curv 
 *
 * @param ch		通道，0 开始
 * @param pch_para 	网络协议格式的通道参数
 * @param pch_tr	测量结果
 * @param spi_ctrl	spi设备
 *
 * @returns   		0 成功，其他错误码
 */
/* ----------------------------------------------------------------------------*/
int32_t get_ch_otdr_curv(
	       	int32_t ch,
	       	const struct _tagCHPara *pch_para,
		OtdrTestResult_t *pch_tr,
		_tagSpiDevCtrl *spi_ctrl,
		int (*stop)(void));

/* --------------------------------------------------------------------------*/
/**
 * @synopsis  convert_para_host2algor 	将测量参数从用户配置格式转换到算法格式
 *
 * @param phost_para	配置参数格式
 * @param palgor_para	算法模块参数格式	
 *
 * @returns   0成功，其他错误码
 */
/* ----------------------------------------------------------------------------*/
int32_t convert_para_host2algor(
		const struct _tagHostOtdrPara *phost_para,
		struct _tagCHPara *palgor_para
		);
/* --------------------------------------------------------------------------*/
/**
 * @synopsis  convert_para_algor2host 
 *
 * @param palgor_para	配置参数格式
 * @param phost_para	算法参数
 *
 * @returns   0
 */
/* ----------------------------------------------------------------------------*/
int32_t convert_para_algor2host(
		 const  OtdrTestParam_t *palgor_para,
		 struct _tagHostOtdrPara *phost_para);


/* --------------------------------------------------------------------------*/
/**
 * @synopsis  cb_cpy_tr 回调函数，算法程序调用，将测试结果拷贝给用户
 *
 * @param tr_dsti	用户数据缓存
 * @param tr_src	算法数据缓存
 * @param error_code	错误码
 *
 * @returns   
 */
/* ----------------------------------------------------------------------------*/
int32_t cb_cpy_tr(OtdrTestResult_t * tr_dst, OtdrTestResult_t *tr_src, int32_t error_code);
/* --------------------------------------------------------------------------*/
/**
 * @synopsis  cb_stop 	通知算法线程停止测量
 * 			使用线程内全局变量作为通道号，根据通道状态确定返回值
 * 			并行otdr需要让每个通道都stop,串行otdr的stop通道无关
 *
 * @returns  0 或者 1 
 */
/* ----------------------------------------------------------------------------*/
int32_t cb_stop();
int32_t cb_stop_paralle();

/* --------------------------------------------------------------------------*/
/**
 * @synopsis  check_algro_tr 检查测量结果是否合法
 *
 * @param tr
 *
 * @returns   
 */
/* ----------------------------------------------------------------------------*/
int32_t check_algro_tr(const OtdrTestResult_t *tr);

int32_t convert_event_algor2host(
		const OtdrTestResult_t *tr,
		struct _tagOtdrEvent HostEptbuf[],
		int32_t ept_num_max );
int32_t convert_data_algor2host(
	        const OtdrTestResult_t *tr,
	        int16_t data_buf[],
	        int max_data_num);
int32_t convert_tr_algor2host(
		const OtdrTestResult_t *tr,
		struct _tagHostTestResult * pHostTr);


int32_t adpt_test_pulse(struct _tagOtdrDev *potdr_dev);

int32_t get_test_pulse(float loss ,int32_t type );
int32_t init_dypulse();
float get_loss_with_m(float len_m, struct _tagSecLoss *psec_loss);
int32_t init_sec_loss_len(struct _tagSecLoss *psec_loss, OtdrTestResult_t *pch_tr, struct _tagCHFiberSec *pfiber_sec);
int32_t get_test_pulse_v1(const struct _tagOtdrDev * potdr_dev, const OtdrTestResult_t *pch_tr);


//按照C风格编译
#ifdef __cplusplus
}
#endif
#endif

